package com.pig4cloud.pig.auth.support.password;

import com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.AuthorizationGrantType;

import java.io.Serial;
import java.util.Map;
import java.util.Set;

/**
 * OAuth2 资源所有者密码认证令牌
 * <p>
 * 该类继承自 OAuth2ResourceOwnerBaseAuthenticationToken，
 * 专门用于处理密码模式（Resource Owner Password Credentials Grant）的认证。
 * 
 * 密码模式说明：
 * - 该模式允许用户直接使用用户名和密码获取访问令牌
 * - 通常用于第一方应用或高度可信的应用
 * - 客户端必须是可信任的，因为需要处理用户的明文密码
 * 
 * 使用场景：
 * - 移动应用的登录
 * - 官方客户端的登录
 * - 传统的用户名密码登录场景
 *
 * @author lengleng
 * @author jumuning
 * @date 2025/05/30
 */
public class OAuth2ResourceOwnerPasswordAuthenticationToken extends OAuth2ResourceOwnerBaseAuthenticationToken {

	/**
	 * 序列化版本号
	 */
	@Serial
	private static final long serialVersionUID = 1L;

	/**
	 * 构造 OAuth2 资源所有者密码认证令牌
	 * <p>
	 * 该构造函数创建一个用于密码模式认证的令牌对象。
	 * 通过调用父类构造函数，传递所有必要的认证信息。
	 * 
	 * @param authorizationGrantType 授权类型，必须是 password
	 * @param clientPrincipal 客户端认证主体，包含客户端身份信息
	 * @param scopes 权限范围集合，定义访问令牌的权限范围
	 * @param additionalParameters 附加参数映射，包含用户名、密码等额外信息
	 */
	public OAuth2ResourceOwnerPasswordAuthenticationToken(AuthorizationGrantType authorizationGrantType,
			Authentication clientPrincipal, Set<String> scopes, Map<String, Object> additionalParameters) {
		super(authorizationGrantType, clientPrincipal, scopes, additionalParameters);
	}

}
